//
//  MYStatusViewModel.swift
//  MYWeibo
//
//  Created by Magic Yu on 16/4/16.
//  Copyright © 2016年 Magic Yu. All rights reserved.
//

//MYStatusListViewModel 对应tableView
//MYStatusViewModel对应单个cell

import UIKit

class MYStatusViewModel: NSObject {
    
    //在初始化方法 或者didSet内部给status赋值 不会调用didSet
    var status: MYStatus?
    
    //模型中的mbImge不能直接用于视图显示 需要声明为属性 外界调用
    var mbImage: UIImage?
    //认证类型
    //初始化的时候会在init方法中赋值 以后再调用 就会从内存中取 消耗内存 但是不消耗cpu
    var verifiedImage: UIImage?
    //头像
    //每次调用都会执行 消耗cpu
    var headImageURL: NSURL?
    /// 转发的文字
    var rewteetTitle: String?
    /// 评论的文字
    var commentTitle: String?
    /// 点赞的文字
    var praiseTitle: String?
    /// 微博来源
    var source: String?
    /// 微博时间 只读属性(计算属性)
    var time: String? {
    return NSDate.sinaDate(status?.created_at ?? "")?.fullDescription()
    }
    
    
    init(status: MYStatus) {
        super.init()
        //记录参数
        self.status = status
        
        //直接计算
        self.headImageURL = NSURL(string: status.user?.profile_image_url ?? "")
        
        //微博等级
        dealMbType()
        //认证类型
        dealVType()
        //微博来源
        dealSource()
        //微博时间
        //dealTime()
        
        //在ViewModel中处理toolBar文字
        rewteetTitle = dealWithToolBar(status.reposts_count, defaultString: "转发")
        commentTitle = dealWithToolBar(status.comments_count, defaultString: "评论")
        praiseTitle = dealWithToolBar(status.attitudes_count, defaultString: "赞")
    }
    
}

//处理微博数据
extension MYStatusViewModel {
    
    //处理微博来源  
    //<a href=\"http://app.weibo.com/t/feed/5yvsgq\" rel=\"nofollow\">TCL乐玩2C</a>
    private func dealSource() {
    
        let startFlag = "\">"
        let endFlag = "</"
        let str = status?.source ?? ""
        if let startRange = str.rangeOfString(startFlag), endRange = str.rangeOfString(endFlag) {
        
            let range = startRange.endIndex..<endRange.startIndex
            source = str.substringWithRange(range)
        }
        
    }
    
    //处理微博时间
    //先将时间模型数据根据指定格式转换为字符串 再根据要显示的指定的格式将字符串转换为时间
    
    //NSDateFormatter是非常消耗性能的 一般使用这个建议使用全局变量或者静态变量
    
//    //存储型属性 不会变的 将它定义为计算型属性
//    private func dealTime() {
//    //Thu Apr 14 11:00:10 +0800 2016
//       
//        let sinaDate = NSDate.sinaDate(status?.created_at ?? "")
//        
//        time = sinaDate?.fullDescription()
//    }
    
    
    //根据数量计算文字 如果大于0 就显示数字 否则显示原文字
    private func dealWithToolBar(count: Int,defaultString: String) -> String {
    
//        //测试数据
//        let count = 12002
        
        if count <= 0 {
        return defaultString
        }
        //当数量超过一万的时候 为了显示小数 先将count / 1000 转换为double类型后再/10
        if count > 10000 {
        return "\(Double(count / 1000) / 10)万"
        }
        
        return "\(count)"
        
    }
    

    private func dealMbType() {
    
        let mbType = status?.user?.mbrank ?? 0
        if mbType > 0 && mbType < 7 {
            self.mbImage = UIImage(named: "common_icon_membership_level\(mbType)")
        }

    }
    
    private func dealVType() {
    
        let vType = status?.user?.verified ?? -1
        switch vType {
            
        case 1:
            verifiedImage = UIImage(named: "avatar_vip")
        case 2,3,5:
            verifiedImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedImage = nil
            
        }
        
    }
    
}




